package edu.proyecto.logical;

import edu.proyecto.app.DB_Benedicto;
import edu.proyecto.poo.*;
import java.util.*;

public class ProspectoDAO {
 
    //Coleccion de datos simulando la capa de acceso a Datos
    DB_Benedicto objVirtualDataBase ;
            
    public ProspectoDAO(){
        objVirtualDataBase=new DB_Benedicto(); 
    }
     
    public List<Prospecto> buscaProspectoFiltro(Prospecto objfiltro){
        List<Prospecto> objLista=null;
        
        //Realizando Filtros : No optimo solo para fines de explicacion de algoritmo
        //se realiza la búsqueda por nombres,apellido paterno,materno,e‐mail,dni(*),
        //teléfono o fecha de contacto
            boolean lbool_nombre=false;
            boolean lbool_ape_pat=false;
            boolean lbool_ape_mat=false;
            boolean lbool_dni=false;
            boolean lbool_email=false;
            boolean lbool_fecha=false;
            
        for(Prospecto objProspecto : objVirtualDataBase.getObjListaProspecto()){
           
            //Uso de un algoritmo antiguo de busqueda utilizando operadores
            // OR de cortocircuito , ahora se utilizaria Collection.sort(List<Prospecto>,Comparer<T>)
                lbool_nombre=false;
                lbool_ape_pat=false;
                lbool_ape_mat=false;
                lbool_dni=false;
                lbool_email=false;
                lbool_fecha=false;
            
            if (objfiltro.getNombre() != null)
                    if(objProspecto.getNombre().equals(objfiltro.getNombre()))
                            lbool_nombre=true;
             
            if (objfiltro.getApellido_paterno() != null)
                    if(objProspecto.getApellido_paterno().equals(objfiltro.getApellido_paterno()))
                            lbool_ape_pat=true;
                        
            if (objfiltro.getApellido_materno() != null)
                    if(objProspecto.getApellido_materno().equals(objfiltro.getApellido_materno()))
                            lbool_ape_mat=true;
            
            if (objfiltro.getDoi() != null)
                    if(objProspecto.getDoi().equals(objfiltro.getDoi()))
                            lbool_dni=true;
            
            if (objfiltro.getEmail() != null)
                    if(objProspecto.getEmail().equals(objfiltro.getEmail()))
                            lbool_email=true;
            
            if (objfiltro.getFecha_contacto() != null)
                    if(objProspecto.getFecha_contacto().compareTo(objfiltro.getFecha_contacto())==0)
                            lbool_fecha=true;
                 
            if((lbool_nombre || lbool_ape_pat ||  lbool_ape_mat ||  lbool_dni || lbool_email || lbool_fecha )==true){
                if (objLista==null)
                    objLista=new ArrayList<Prospecto>();
                objLista.add(objProspecto);
            }
        }
        
        return objLista;
    }
    
    public Prospecto registrarProspecto(String nombre,String apepat,String apemat,String doi,String telefono,String Email,Date fecha){
        Prospecto obj=null;
        
        if ( (nombre.isEmpty() && apepat.isEmpty() && apemat.isEmpty() && Email.isEmpty() )== false ){
            obj=new Prospecto();
            obj.setIdprospecto(objVirtualDataBase.getObjListaProspecto().size()+1000);
            obj.setNombre(nombre);
            obj.setApellido_materno(apemat);
            obj.setApellido_paterno(apepat);
            obj.setDoi(doi);
            obj.setTelefono(telefono); 
            obj.setFecha_contacto(fecha);
            objVirtualDataBase.getObjListaProspecto().add(obj);
        }
            
        return obj; 
    }
    
    public boolean eliminarProspecto(int codigo,String doi){
      boolean lbool_result=false;
      Prospecto obj=null;
        for(int i=0;i<objVirtualDataBase.getObjListaProspecto().size();i++) {
            obj=objVirtualDataBase.getObjListaProspecto().get(i);
            if( obj.getDoi().equals(doi)==true && obj.getIdprospecto()==codigo) {
                objVirtualDataBase.getObjListaProspecto().remove(i);
                lbool_result=true;
                break;
            }  
        }
        return lbool_result;
    }
    
    public void ListadoGeneral(){
        for(Prospecto objProspecto : objVirtualDataBase.getObjListaProspecto())
            System.out.println(objProspecto.toString());
    }
    
    
}
